package saei.bean;

import java.util.Date;
import javax.persistence.*;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.Index;

import saei.bean.parametros.MarcaEquipo;
import saei.bean.parametros.ModeloCpu;
import saei.bean.parametros.Proveedor;
import saei.bean.vo.SolicitudCompraVO;

@SuppressWarnings("serial")
@Entity
@Table(name="Solicitud_Compra")
public class SolicitudCompra  extends EntidadPersistente
{
	@Column(name="num_solicitud", unique=true)
    @Index(name="uk_solicitud_compra")
    private int numeroSolicitud;
    @Temporal(value= TemporalType.TIMESTAMP)
    @Column(name="fec_solicitud")
    private Date fechaSolicitud;
    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
	@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
    @ForeignKey(name="fk_solicitud_marca")
    @JoinColumn(name="id_marca")
    private MarcaEquipo marca;
    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
	@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
    @ForeignKey(name="fk_solicitud_modelo")
    @JoinColumn(name="id_modelo")
    private ModeloCpu modelo;
    private int cantidad;
    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
	@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
    @ForeignKey(name="fk_solicitud_gerente")
    @JoinColumn(name="id_gerente")
    private Usuario gerenteFirmante;
    private String motivo;
    @Column(name="num_orden")
    private Integer numeroOrdenCompra;
    @Temporal(value= TemporalType.TIMESTAMP)
    @Column(name="fec_compra")
    private Date fechaCompra;
    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
	@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
    @ForeignKey(name="fk_solicitud_proveedor")
    @JoinColumn(name="id_Proveedor")
    private Proveedor proveedor;

	public SolicitudCompra () {
		fechaSolicitud = new Date();
	}
	
	public int getNumeroSolicitud() {
		return numeroSolicitud;
	}

	public void setNumeroSolicitud(int numeroSolicitud) {
		this.numeroSolicitud = numeroSolicitud;
	}

	public Date getFechaSolicitud() {
		return fechaSolicitud;
	}

	public void setFechaSolicitud(Date fechaSolicitud) {
		this.fechaSolicitud = fechaSolicitud;
	}

	public MarcaEquipo getMarca() {
		return marca;
	}

	public void setMarca(MarcaEquipo marca) {
		this.marca = marca;
	}

	public ModeloCpu getModelo() {
		return modelo;
	}

	public void setModelo(ModeloCpu modelo) {
		this.modelo = modelo;
	}

	public int getCantidad() {
		return cantidad;
	}

	public void setCantidad(int cantidad) {
		this.cantidad = cantidad;
	}

	public Integer getNumeroOrdenCompra() {
		return numeroOrdenCompra;
	}

	public void setNumeroOrdenCompra(Integer numeroOrdenCompra) {
		this.numeroOrdenCompra = numeroOrdenCompra;
	}

	public Date getFechaCompra() {
		return fechaCompra;
	}

	public void setFechaCompra(Date fechaCompra) {
		this.fechaCompra = fechaCompra;
	}

	public Proveedor getProveedor() {
		return proveedor;
	}

	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}

	public SolicitudCompraVO getVO() {
		SolicitudCompraVO retVal = new SolicitudCompraVO();
		
		retVal.setNumeroSolicitud(numeroSolicitud);
		retVal.setFechaSolicitud(fechaSolicitud);
		retVal.setMarca(marca.getDescripcion());
		retVal.setModelo(modelo.getDescripcion());
		retVal.setCantidad(cantidad);
		retVal.setGerenteFirmante(gerenteFirmante.getNombre());
		retVal.setMotivo(motivo);
		retVal.setNumeroOrdenCompra(numeroOrdenCompra);
		retVal.setFechaCompra(fechaCompra);
		retVal.setProveedor(proveedor != null ? proveedor.getDescripcion() : "");
		
		return retVal;
	}

	public String getMotivo() {
		return motivo;
	}

	public void setMotivo(String motivo) {
		this.motivo = motivo;
	}

	public Usuario getGerenteFirmante() {
		return gerenteFirmante;
	}

	public void setGerenteFirmante(Usuario gerenteFirmante) {
		this.gerenteFirmante = gerenteFirmante;
	}
}
